// 安全拦截器
const jwt = require("jsonwebtoken");

/**
 * 验证权限
 * @param token
 * @param secretkey 秘钥
 * @param success
 * @param error
 */
function verify (token,secretkey,success,error){
    jwt.verify(token,secretkey,function(err,decode){
        if(err){
            if (error) {
                error(err);
            }
        }else{
            if (success) {
                success(decode);
            }
        }
    })
}

function verifysync (token,secretkey){
    return new Promise((resolve, reject) => {
        jwt.verify(token,secretkey,function(err,decode){
            if(err){
                console.log(err.message)
                resolve({err:'error',msg:'会话已过期，请重新登录'})
                // reject({err:'error',msg:'会话已过期，请重新登录'})
                // reject(err)
                // return;
            }else{
                resolve(decode)
            }
        })
    })
}

/**
 * 签名
 * @param load 载荷 json对象 存储存在
 * @param secretkey 秘钥
 * @param expiresIn 过期时间 秒
 * @returns {number | PromiseLike<ArrayBuffer>}
 */
function sign (load,secretkey,expiresIn) {
    var token = jwt.sign(load,secretkey,{expiresIn: expiresIn});
    return token;
}

module.exports = {verify,sign,verifysync};

// let user = {id:111,name:'user',password:123456}
// delete user.password
// let token = sign(user, '123456', 10);
// let token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MTExLCJuYW1lIjoidXNlciIsImlhdCI6MTU5NTUwMzM3NSwiZXhwIjoxNTk1N'
//     + 'TAzMzg1fQ.6kkhF-pJToIn9MlMHC4jsse1zCef_wocWx2NHI5wnHA';
// verify(token,'123456',function(user){
//     console.log(user)
// },function(err){
//     console.error(err)
// })

// 回调地狱
// fs.readFile('',function(err,result){
//     if (err) {
//         console.error(err)
//         return
//     }
//     fs.watchFile('',function(err){
//         if(err){
//             console.log(err)
//         }
//     })
// })

// new Promise(function(resolve, reject){
//     // 业务代码
//     xxxxx(a,b,c,function(err, result){
//         if (err) {
//             if (reject) {
//                 reject()
//             } else {
//                 console.log(err)
//             }
//             return;
//         }
//         if(resolve) {
//             resolve(result)
//         }
//     })
// }).then(function(result){
//     // resolve
// },function(err){
//
// }).catch(function(err){
//
// })
